package com.vf.s.mvc.sync.common.task.http;

import java.util.Date;

import com.jfinal.kit.StrKit;
import com.jfinal.log.Log;
import com.vf.s.common.model.biz.BizLayer;
import com.vf.s.common.model.sync.BizSyncDataLog;
import com.vf.s.common.model.sync.BizSyncDataTask;
import com.vf.s.mvc.sync.common.util.FullUtil;
import com.vf.s.mvc.sync.common.util.PageUtil;
import com.vf.s.mvc.sync.common.util.TimeUtil;

public class HttpTaskHandle {

	protected final static Log LOG = Log.getLog(HttpTaskHandle.class);

	public static void handle(BizSyncDataTask task) {
		if (StrKit.isBlank(task.getUrl())) {
			task.setStatus("0");
			task.update();
			LOG.debug(String.format("无效任务定义【%s】!!!", task.getName()));
			return;
		}
		
		//不合规范
		if(StrKit.isBlank(task.getMonth()) && StrKit.isBlank(task.getDay())
				&& StrKit.isBlank(task.getHour()) && StrKit.isBlank(task.getMinute()) && StrKit.isBlank(task.getSecond())) {
			task.setStatus("0");
			task.update();
			LOG.debug(String.format("无效任务定义【%s】!!!", task.getName()));
			return;
		}
		
		BizLayer bizLayer=BizLayer.dao.findById(task.getLayerId());
		if (bizLayer==null  || StrKit.isBlank(bizLayer.getDefaultStyleId())) {
			task.setStatus("0");
			task.update();
			LOG.debug(String.format("无效任务定义【%s】,请指定导入图层或确认指定图层是否已设置样式!!!", task.getName()));
			return;
		}
		

		Date nextTime = task.getNextTime();// 下一次执行时间
		// 时间不到不执行
		if (nextTime != null && new Date(System.currentTimeMillis()).getTime() < nextTime.getTime()) {
			return;
		}

		// 是否有运行的进程
		BizSyncDataLog bizSyncDataLog=BizSyncDataLog.dao.findFirst("SELECT * FROM "+BizSyncDataLog.TABLE_NAME+" WHERE taskId=? AND status='0' ", task.getId());
		if (bizSyncDataLog!=null ) {
			if (task.getLockTime() < task.getBreakTime()) {
				int LockTime = task.getLockTime() + 1;
				task.setLockTime(LockTime);
				task.setNextTime(TimeUtil.getNextTime(task));
				task.update();
				return;
			}else {
				task.setStatus("0");
				task.update();
				LOG.debug(String.format("【%s】线程阻塞，请联系管理员!!!", task.getName()));
				return;
			}
		}
		//开始执行
		doTask( bizLayer, task);

	}
	

	private static void doTask(BizLayer bizLayer,BizSyncDataTask task) {
		if(StrKit.equals("1", task.getIsPag())) {
			PageUtil.handle(bizLayer, task);
		}
		else {
			FullUtil.handle(bizLayer, task);
		}
	}

}
